# 字典：dict。dict全称dictionary，在其他语言中也称为map，使用键-值（key-value）存储，具有极快的查找速度。
d = {'Michael': 95, 'Daniel': 99, 'Bob': 100, 'jack': 90, 'Tracy': 93}
print(d['Daniel'])
# 添加数据到dict
d['Adam'] = 88
print(d['Adam'])
print(d)
# 要避免再dict中key不存在的错误，一是通过in判断key是否存在
print('Daniel' in d)
print('Alica' in d)
# 二是通过dict提供的get()方法，如果key不存在，可以返回None，或者是自己指定的value值
print(d.get('Michael'))
print(d.get('Daniels'))
print(d.get('Daniels', -1))
# 要删除一个key，用pop(key)方法，对应的value也会从dict中删除：
d.pop('Bob')
print(d)
'''
需要牢记的第一条就是dict的key必须是不可变对象。dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较，dict有以下几个特点：
    查找和插入的速度极快，不会随着key的增加而变慢；
    需要占用大量的内存，内存浪费多。
而list相反：
    查找和插入的时间随着元素的增加而增加；
    占用空间小，浪费内存很少。
'''
# 集合 set：set和dict类似，也是一组key的集合，但不存储value。由于key不能重复，所以，在set中，没有重复的key。
# 要创建一个set，需要提供一个list作为输入集合：
s = set([1, 2, 3])
print(s)
# 注意，传入的参数[1, 2, 3]是一个list，而显示的{1, 2, 3}只是告诉你这个set内部有1，2，3这3个元素，显示的顺序也不表示set是有序的
# 重复元素在set中自动被过滤：
s = set([1, 2, 3, 1, 1, 2, 2, 3, 3, 2])
print(s)
# 通过add(key)方法可以添加新的元素到set中，可以重复添加，但是不会有效果
s.add(4)
print(s)
# 通过remove(key)方法可以删除元素
s.remove(4)
print(s)
# set可以看成数学意义上的无序和无重复元素的集合，因此，两个set可以做数学意义上的交集、并集等操作
s1 = set([1, 2, 3, 4])
s2 = set([2, 3, 4, 5])
print(s1 & s2)
print(s1|s2)
'''set和dict的唯一区别仅在于没有存储对应的value，但是，set的原理和dict一样，所以，同样不可以放入可变对象，因为无法判断两个可变对象是否相等，也就无法保证set内部“不会有重复元素”'''

#对于可变对象，比如list，对list进行操作，list内部的内容是会变化的，比如：
a=['c','b','a']
b=[5,4,3,2,1]
a.sort()
b.sort()
print(a)
print(b)
#对于不可变对象，比如str，对str进行操作
a='abc'
b=a.replace('a','A')
print(b)
print(a)
